/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package interpretadorportugolvisual.partes;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Polygon;

/**
 *
 * @author abraaoisvioliveirasouzadocarmo
 */
public abstract class Seta {
    private void reiniciarCores() {
        g = 1;
        b = 1;
        r = 1;
    }

    public enum EstadoElemnt {

        recebendo,
        esperando,
        parado
    };
    private int mult = 4;
    private float fator = 0.08f;
    private Polygon poly;
    private float b = 1,  r = 1,  g = 1;
    private EstadoElemnt estado = EstadoElemnt.parado;
    private boolean animacaoIda = true;

    public boolean isBusy() {
        return !(estado == EstadoElemnt.parado);
    }

    public void setRecebendo() {
        estado = EstadoElemnt.recebendo;
        reiniciarCores();
        animacaoIda = true;
    }

    public void setEsperando() {
        estado = EstadoElemnt.esperando;

        reiniciarCores();
        animacaoIda = true;
    }

    public Seta(int x, int y) {
        poly = createPolygon(x, y, mult);
    }

    public abstract Polygon createPolygon(int x, int y, int mult);

    public void desenhar(Graphics gd) {


        gd.setColor(new Color(r, g, b));
        gd.fillPolygon(poly);
        gd.setColor(Color.black);
        gd.drawPolygon(poly);


        atualizar();
    }

    public void atualizar() {
        switch (estado) {
            case esperando:
                atualizarEsperando();
                break;
            case recebendo:
                atualizarRecebendo();
                break;
        }
    }

    public void atualizarRecebendo() {
        if (animacaoIda) {
            r = r - fator;
            b = r;

            if (r < 0) {
                reiniciarCores();
                animacaoIda = false;
            }
        } else {
            r = r + fator;
            b = r;

            if (r > 1) {
                reiniciarCores();
                estado = EstadoElemnt.parado;
            }
        }
    }

    public void atualizarEsperando() {
        if (animacaoIda) {
            g = g - fator;
            b = g;

            if (g < 0) {
                reiniciarCores();
                animacaoIda = false;
            }
        } else {
            g = g + fator;
            b = g;

            if (g > 1) {
                reiniciarCores();
                animacaoIda = true;
            }
        }
    }
}
